package com.xlf.controller.admin;

import com.xlf.dto.StatusDTO;
import com.xlf.service.FoodService;
import com.xlf.service.OrderService;
import com.xlf.utils.ResponseResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 实时订单控制层。
 * 使用WebSocket为后台和服务器进行长连接，当服务器新增订单（微信小程序有人下单），服务器完成
 * 数据库新增数据后，会向后台系统发送订单数据
 */
@Tag(name = "实时订单管理", description = "使用WebSocket为后台和服务器进行长连接，当服务器新增订单（微信小程序有人下单），服务器完成数据库新增数据后，会向后台系统发送订单数据")
@RestController
@RequestMapping("/orderTime")
public class RealOrderTimeController {

    @Resource
    FoodService foodService;

    @Resource
    OrderService orderService;

    /**
     * 获取实时订单列表。
     * 主要用于后台管理系统实时显示新产生的订单。
     * @return  订单数据
     */
    @Operation(summary = "获取实时订单列表", description = "主要用于后台管理系统实时显示新产生的订单")
    @GetMapping("/getRealOrderTimeList")
    ResponseResult getRealOrderTimeList() {
        return null;
    }

    /**
     *通过orderId获取下单的食物列表
     * @param id    订单id
     * @return      订单数据
     */
    @Operation(summary = "通过orderId获取下单的食物列表")
    @GetMapping("/getOrderFoodByOrderId/{id}")
    ResponseResult getOrderFoodByOrderId(@PathVariable("id") Long id){
        return ResponseResult.success("通过orderId获取食物列表成功", foodService.getOrderFoodByOrderId(id));
    }

    /**
     * 根据订单状态获取订单
     * @param statusDTO 符合状态对象，包含订单状态、支付状态和订单id
     * @return          匹配的订单数据
     */
    @Operation(summary = "根据订单状态获取订单")
    @PostMapping("/getRealOrderTimeByStatus")
    ResponseResult getRealOrderTimeByStatus(@RequestBody StatusDTO statusDTO){
        return  ResponseResult.success("获取实时订单成功",orderService.getRealOrderTimeByStatus(statusDTO));
    }

    /**
     * 通过orderId获取订单状态
     * @param id    订单id
     * @return      订单的复合状态对象，包含订单状态、支付状态、备注和订单id
     */
    @Operation(summary = "通过orderId获取订单状态")
    @GetMapping("/getOrderStatusByOrderId/{id}")
    ResponseResult getOrderStatusByOrderId(@PathVariable("id") Long id){
        return ResponseResult.success("通过orderId获取订单状态成功", orderService.getOrderStatusByOrderId(id));
    }

    /**
     * 根据订单id更新订单数据，只能更新订单/支付的状态
     * @param statusDTO 订单的复合状态对象，包含订单状态、支付状态、备注和订单id
     * @return          操作结果
     */
    @Operation(summary = "根据订单id更新订单数据，只能更新订单/支付的状态")
    @PostMapping("/updateOrderStatusById")
    ResponseResult updateOrderStatusById(@RequestBody StatusDTO statusDTO){
        return ResponseResult.success("修改成功",orderService.updateOrderStatusById(statusDTO));
    }
}